/**
 *
 *  Copyright (c) 2011, AstroDAbis
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without modification,
 *  are permitted provided that the following conditions are met:
 *
 *      * Redistributions of source code must retain the above copyright notice,
 *        this list of conditions and the following disclaimer.
 *      * Redistributions in binary form must reproduce the above copyright notice,
 *        this list of conditions and the following disclaimer in the documentation
 *        and/or other materials provided with the distribution.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 *  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 *  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 *  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 *  OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */
package org.jiscinvolve.astrodabis.mallow.model.tap;

import org.junit.Test;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.jiscinvolve.astrodabis.mallow.model.api.Tag;
import org.jiscinvolve.astrodabis.mallow.model.api.TagBean;
import org.jiscinvolve.astrodabis.mallow.model.api.TagBeanImpl;
import org.jiscinvolve.astrodabis.mallow.model.api.Query;
import org.jiscinvolve.astrodabis.mallow.model.api.QueryBean;
import org.jiscinvolve.astrodabis.mallow.model.api.Account;

import org.jiscinvolve.astrodabis.mallow.model.api.JoinData;

import org.jiscinvolve.astrodabis.mallow.model.tap.TapJoin;
import org.jiscinvolve.astrodabis.mallow.model.tap.TapTable;

import org.jiscinvolve.astrodabis.mallow.impl.model.jpa.PersistentManagerExtra;
import org.jiscinvolve.astrodabis.mallow.impl.model.tap.TapTableImpl;

//
// Test base class.
import org.jiscinvolve.astrodabis.mallow.model.TestBase;

/**
 * JUnit test for the TapJoins.
 *
 */
public class TapJoinTestCase
extends TestBase
    {

    /**
     * Our debug logger.
     * 
     */
    private static Log log = LogFactory.getLog(TapJoinTestCase.class);

    /**
     * Test data
     *
     */
    public class TestJoinData
    implements JoinData
        {

        public TestJoinData(TapTable t1, TapTable t2, String p1, String p2)
            {
            this.t1 = t1 ;
            this.t2 = t2 ;
            this.p1 = p1 ;
            this.p2 = p2 ;
            }

        private TapTable t1 ;
        private TapTable t2 ;
        private String   p1 ;
        private String   p2 ;

        public TapTable t1()
            {
            return this.t1 ;
            }

        public TapTable t2()
            {
            return this.t2 ;
            }

        public String p1()
            {
            return this.p1 ;
            }

        public String p2()
            {
            return this.p2 ;
            }
        }


    @Test
    public void frog000()
    throws Exception
        {
        log.debug("TagTestCase.frog000()");

        Account actor = this.register();

        Tag tag = actor.tags().create(
            new TagBeanImpl(
                "test-tag-alpha",
                "JUnit generated tag"
                )
            );

        TapService svca = actor.services().create(
            TapService.Action.SAVE,
            new TapServiceBeanImpl(
                "test-service-alpha",
                "JUnit generated service"
                )
            );

        TapService svcb = actor.services().create(
            TapService.Action.SAVE,
            new TapServiceBeanImpl(
                "test-service-beta",
                "JUnit generated service"
                )
            );

        TapTable taba = svca.tables().create(
            TapTable.Action.SAVE,
            new TapTableBeanImpl(
                "test-table-alpha",
                "JUnit generated table",
                "pkeya"
                )
            );

        TapTable tabb = svcb.tables().create(
            TapTable.Action.SAVE,
            new TapTableBeanImpl(
                "test-table-beta",
                "JUnit generated table",
                "pkeyb"
                )
            );

PersistentManagerExtra mx = (PersistentManagerExtra) manager();

        TapJoin j1 = mx.joins().create(
            new TestJoinData(
                taba,
                tabb,
                "pkey-a-1",
                "pkey-b-1"
                )
            );

        TapJoin j2 = mx.joins().create(
            new TestJoinData(
                taba,
                tabb,
                "pkey-a-1",
                "pkey-b-1"
                )
            );
        }
    }

